package pers.ijfxu.testngext.utils;

import java.util.*;

/**
 * 集合工具类
 *
 * @author ijfxu  
 * @since 2021/5/23 14:06
 */
public class CollectUtils {
    /**
     * 数组转list列表
     * 该方法被弃用，参考newArrayList(T...datas)
     * 
     * @param datas 数组
     * @param <T>   支持任意类型的数据
     * @return java.util.List
     * @author ijfxu 
     * @since 2021/1/27 14:06
     */
    @Deprecated
    public static <T> List<T> arr2list(T[] datas) {
        List<T> datalist = new ArrayList<>();
        for (T data : datas) {
            datalist.add(data);
        }
        return datalist;
    }

    /**
     * 创建ArrayList对象
     * 
     * @param <T> 列表数据类型
     * @return ArrayList对象
     * @author ijfxu  
     * @since 2021/4/18 14:06
     */
    public static <T> List<T> newArrayList() {
        return new ArrayList<>();
    }

    /**
     * 创建ArrayList，并添加初始值
     * 
     * @param <T>   列表初始元素统一类型
     * @param datas 列表初始元素
     * @return ArrayList列表对象
     * @author ijfxu  
     * @since 2021/4/18 14:06
     */
    @SafeVarargs
    public static <T> List<T> newArrayList(T... datas) {
        List<T> ndatas = new ArrayList<>();
        Arrays.stream(datas).forEach(ndatas::add);
        return ndatas;
    }

    /**
     * 创建HashMap对象
     * 
     * @param <T> keys类型
     * @param <K> value类型
     * @return HashMap对象
     * @author ijfxu  
     * @since 2021/4/18 14:06
     */
    public static <T, K> Map<T, K> newHashMap() {
        return new HashMap<T, K>();
    }

    /**
     * 创建HashMap对象并设置初始化数据
     * 
     * @param <T>    keys类型
     * @param <K>    value类型
     * @param keys   key列表
     * @param values values列表
     * @return HashMap对象
     */
    public static <T, K> Map<T, K> newHashMap(List<T> keys, List<K> values) {
        Map<T, K> newMap = newHashMap();
        int cycleNum = 0;
        if (keys.size() != values.size()) {
            System.err.println("keys.size != values.size");
            if (keys.size() > values.size()) {
                cycleNum = values.size();
            } else {
                cycleNum = keys.size();
            }
        }
        cycleNum = keys.size();
        for (int i = 0; i < cycleNum; i++) {
            newMap.put(keys.get(i), values.get(i));
        }
        return newMap;
    }

}
